home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Utilities Professional 1-1500
/
Utilities Professional 1-1500 (1994)(WPD)[!].iso
/
12511500
/
var1482.dms
/
var1482.adf
/
Scripts
/
bishops.mc
< prev
next >
Wrap
Text File
|
1994-07-07
|
10KB
|
453 lines
; This file Copyright 1994 Dan Wesnor
;
; This file may be freely distributed as long as no
; information is changed, no charge is made for
; the file, and the archive in which the file was
; contained is distributed in tact. Any violation
; of these conditions requires written authorization
; by the copyright holder.
/*
This is a script for the Magic Camera rendering system.
Magic Camera (MC) uses ray-tracing for realisting rendering
of shadows, reflections, and transparency. It is in the
final phase of completion and should be released shortly.
Plans are for release as shareware with a nominal charge
for a full working version.
See comments for a description of features.
Comments are either C-style (like this one), or a semi-colon
followed by text ; like this.
*/
/*
Primitive objects include triangles and parallelograms,
both of which may be phong smoothed, spheres, rings (or disks),
and planes.
Compound objects, which allow complex shapes to be built,
include extrusions, spins, skin-over-frame, filled complex
2-d polygons (with holes), heightfields, boxes, and
polygon spheres.
Available patterns are check, wood, marble, brick,
several types of bitmap wraps, blotch, and clouds.
Textures include waves and several type of bumpmaps.
Lamps include point-source, directional, directional
spotlights (w/ beam width and beam falloff sharpness
controls), or spherical extended.
Variables, which may be used in complex expressions, include
real numbers, integers, 3d-vectors, and arrays of reals, 2-d vectors,
and 3-d vectors. Variables and arrays may be used to facilitate
animation.
*/
maxoctdepth 5 ; controls for the octree, which
maxobcube 2 ; is an adaptive automatic object bounding
; mechanism
maxaadepth 2 ; set the maximum number of pixel splits
; for adaptive anti-aliasing
; a couple of variables to set the board size
real boardsize = 64
real squaresize = boardsize/8
camera { ; set up the camera
loc <60, 30, 140> ; location
target <3.5*squaresize, 6, 4*squaresize> ; point at
res 640 480 ; image resolution
aspect 1.0 ; pixel aspect
hfov 45 ; horizontal field of view
}
lamp {
direct <.25, -1.75, -1> ; a directional (non-
; point source) lamp
color <0.5, 0.5, 0.5> ; the lamp color in RGB
}
lamp {
direct <-1, -.75, -1> ; another directional lamp
color <0.5, 0.5, 0.5>
}
include "scripts/bishop.obj" ; include file which contains
; bishop.obj
/* this little manipulation assures us that we have a bishop
which will fit on a square of the chessboard
*/
object mybishop.obj
real bishop_scale = squaresize/(2*bishop_radius)
scale bishop.obj <bishop_scale, bishop_scale, bishop_scale>
instance bishop.obj
endobject
/* facetted */
color red { ; build a 'color' type pattern called 'red'
diff <1, 0, 0> ; diffuse color in RGB
scoef 50 ; specular coefficient
; (hot spot tightness)
srefl 1 ; specular reflection
; (hot spot brightness)
}
translate mybishop.obj <3.5*squaresize, 0, 3.5*squaresize>
; put the bishop in position
instance { ; drop it into the scene
object mybishop.obj
subpatt __bishopsurf red ; substitute the pattern 'red'
; for the pattern '__bishopsurf',
; effectively changing the object's
; color
}
reset mybishop.obj ; reset the bishop's transformation matrix
translate mybishop.obj <3.5*squaresize, 0, 5.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf red
}
reset mybishop.obj
/* checked */
color blue { ; another simple 'color' pattern
diff <0, 0, 1>
scoef 50
srefl 1
}
color white { ; another simple 'color' pattern
diff <1, 1, 1>
scoef 50
srefl 1
}
check blue_white { ; a checkerboard pattern called 'blue_white'
patt1 blue ; uses, you guessed it, 'blue'
patt2 white ; and 'white'
xsize .75 ; the checks are 0.75 units
ysize .75 ; square
zsize .75
}
/*
translate and create a blue-white checked bishop
*/
translate mybishop.obj <6.5*squaresize, 0, 4.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf blue_white
}
reset mybishop.obj
/* brick */
color brick_red { ; new 'color' pattern
diff <.8, 0, 0>
}
color mortar_white { ; new 'color' pattern
diff <.8, .8, .8>
}
brick brick1 { ; a brick pattern
mortar mortar_white ; pattern for 'mortar'
brick brick_red ; pattern for brick
xsize .9 ; dimensions of the bricks
ysize .45
zsize .45
msize .1 ; thickness of the mortar
yoffset .4 ; offset each (y dimension) row
; of bricks 0.4 units in X
zoffset 0 ; don't offset any z-dimension
; row of bricks
}
; move the object into position and instance it with the brick pattern
translate mybishop.obj <5.5*squaresize, 0, 5.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf brick1
}
reset mybishop.obj
/* glass */
color glass { ; another simple 'color' pattern, but this
; one will be transparent
diff <0, 0, 0> ; to be completely clear, we don't
; add any diffuse color
refl <.1, .1, .1> ; glass IS slightly reflective
trans <.9, .9, .9> ; the glass transmits 90% of all
; RGB color
filt <.01, .01, .01> ; this controls how much color
; the glass doesn't transmit per
; unit length, i.e., how much
; light is filtered by the glass
scoef 50 ; specular hot spot numbers
srefl 1
index 1.67 ; the glass's index of refraction
}
; position it and drop it into the scene with the new pattern
translate mybishop.obj <4.5*squaresize, 0, 6.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf glass
}
reset mybishop.obj
/* mirror */
color mirror { ; create a reflective 'color'
diff <0, 0, 0> ; if diff was not <0,0,0>, the mirror
; would appear tinted
refl <.9, .9, .9> ; 90% of light is reflected
scoef 50 ; specular reflection numbers
srefl 1
}
; movie it, drop it with new pattern
translate mybishop.obj <2.5*squaresize, 0, 4.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf mirror
}
reset mybishop.obj
/* wooden */
color light_brown { /* new 'color' for wood */
diff <0.7, 0.5, 0.0>
}
color dark_brown { /* new 'color' for wood */
diff <0.3, 0.1, 0.0>
}
wood light_wood { ; a wood pattern
patt light_brown ; the meat of the wood
grain dark_brown ; the pattern to use for the grain
scale 10 ; scale the pattern so it appears
; the right size
}
; move it, drop it
translate mybishop.obj <2.5*squaresize, 0, 6.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf light_wood
}
reset mybishop.obj
/* blotch */
; new colors
color a_red { diff <1, 0, 0> }
color a_blue { diff <0, 0, 1> }
color a_green { diff <0, 1, 0> }
color a_yellow { diff <1, 1, 0> }
color a_white { diff <1, 1, 1> }
blotch asvpt { ; create a blotch pattern
patt a_red ; a blotch is basically
patt a_blue ; a mildly interesting blend
patt a_white ; of several colors
patt a_green
patt a_yellow
scale 3
}
; move it, drop it
translate mybishop.obj <6.5*squaresize, 0, 6.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf asvpt
}
reset mybishop.obj
/* cloudy */
; colors for clouds
color cl_white {
diff <1, 1, 1>
}
color cl_blue {
diff <.3, .3, 1>
}
clouds cloudy {
clouds cl_white ; the clouds are white on a
sky cl_blue ; blue sky
scale .5 ; set the size
; the apparent turbulence of the
; clouds is also controllable
}
; place the object
translate mybishop.obj <1.5*squaresize, 0, 5.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf cloudy
}
reset mybishop.obj
/* marble */
; color for marble
color ma_grain {
diff <.3, .2, 0>
}
color ma_white {
diff <.9, .8, .5>
}
marble marb {
patt ma_white ; once again, this is the 'meat'
grain ma_grain ; and the grain of the marble
scale 3 ; size it
pow .75 ; control the sharpness between the
; meat and the grain
}
; place the object
translate mybishop.obj <1.5*squaresize, 0, 3.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf marb
}
reset mybishop.obj
/* waves */
color wa_yellow {
diff <1, 1, 0>
}
waves wavy {
scale 1.2 ; set the size of the texture,
; also the apparent height and
; complexity could have been changed
}
; notice that NULLTEXT is the name used when substituting for
; a texture that does not exist
translate mybishop.obj <4.5*squaresize, 0, 4.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf wa_yellow
subtext NULLTEXT wavy
}
reset mybishop.obj
/* texture wrapped */
iff "mapfiles/tartan.iff" wrap.map ; load the iff file
; and name it wrap.map
wrapcy wrappatt {
bitmap wrap.map ; use 'wrap.map'
patt red ; characteristics like
; reflectivity and trasparency
; will be pulled from the pattern
; called 'red'
height bishop_height*bishop_scale/6
; the height of the cylinder used
; as an intermediate surface by the wrap
xrep 4 ; wrap the bitmap around the cylinder once
filter 1 ; turn off pre-filtering of the image
dodiff ; the bitmap will be used to modulate
; the diffuse color of the object.
; it could also modulate reflection
; and transmission
}
; place the object
translate mybishop.obj <5.5*squaresize, 0, 3.5*squaresize>
instance {
object mybishop.obj
subpatt __bishopsurf wrappatt
}
reset mybishop.obj
/* the checkerboard */
/* the chess pieces will be placed on a checkerboard made
of squares of alternating mirrors and reflective marble
*/
color mirror_black {
diff <0, 0, 0>
refl <.55, .55, .55>
scoef 50
srefl 1
}
color mirror_white {
diff <.75, .75, .75>
refl <.25, .25, .25>
scoef 50
srefl 1
}
marble black_marble {
patt mirror_black
grain mirror_white
scale .075
pow .75
}
marble white_marble {
patt mirror_white
grain mirror_black
scale .6
pow .75
}
check checker {
patt1 white_marble
patt2 mirror_black
xsize 8
zsize 8
ysize 1
}
/* this box is the checker board itself */
box {
loc <0, 0, 0>
v1 <boardsize, 0, 0>
v2 <0, -boardsize/32, 0>
v3 <0, 0, boardsize>
patt checker
}